# 将之前封装的`MyMath`类中的实例方法改为静态方法, 体会两者的区别.
from math import sqrt


class MyMath(object):
    @staticmethod
    def add(a, b):  # 加法
        return a + b

    @staticmethod
    def my_min(a, b):  # 减法
        return a - b

    @staticmethod
    def mul(a, b):  # 乘法操作
        return a * b

    @staticmethod
    def div(a, b):  # 除法操作
        return a / b

    @staticmethod
    def my_power(a, b):  # 幂操作
        return a ** b

    @staticmethod
    def my_sqr(a):  # 开方操作
        return sqrt(a)


print(MyMath.add(2, 3))  # 测试
print(MyMath.my_min(5, 3))


# 为上节课自定义类添加以下功能:
# 添加类属性 / 添加类私有属性/添加类方法或者类的私有属性
# 在`__init__`方法中初始化实例属性
# 在`__init__`方法中绑定私有实例属性
# 在自定义类中实现`__str__`, 自定义输出格式
class my_fruit(object):
    definition = "水果是一种食物!"
    __my_def = "水果很好吃!"
    __color = "颜色都是各种各样的!"

    def __init__(self, name, taste):
        self.name = name
        self.__my_def = taste
        print(self.name)

    @classmethod
    def fruit_color(cls):
        return cls.__color

    def __str__(self):
        return f"水果基本信息 {self.definition}"


my_f = my_fruit("苹果", "甜的")
print(my_f)  # 自定义str 测试
print(my_f._my_fruit__my_def)  # 访问实例的私有属性
print(my_f.fruit_color())  # 类方法访问类的私有属性
print(my_fruit._my_fruit__my_def)  # 通过`实例._类名__变量名`来访问类私有属性
